﻿#include <stdio.h>

int main()
{
	printf("%d",strlen("c:\test\121"));          
	return 0;
}

 //解析：
//答案为7，strlen：获取字符串的有效长度，不包括'\0，
 // "c:\test\121": 在该字符串中，\t是转移字符，水平制表，跳到下一个tab的位置；
 // 而\121表示一个字符，是讲121看做8进制数组，转换为10进制后的81，作业为ASCII码值的字符，即：字符'Q' ，
 // 故上述字符串实际为："c:  estQ",只有7个有效字符

#include <stdio.h>

int main()
{
	printf("%d", strlen("\?"));
	return 0;
}
//解析：
//答案按为1，转义字符'\t' '\n' '\\' '?' 等占字符串中的1个有效长度

#include <stdio.h>

int main()
{
	printf("%d", strlen("\0"));
	return 0;
}
//解析：
//答案按为0，转义字符'\0'为特例，占字符串中的0个有效长度

#include <stdio.h>

int main()
{
	printf("%d\n", strlen("为"));
	printf("%d\n", strlen("?"));         //英文的问号
	printf("%d\n", strlen("a"));
	printf("%d\n", strlen("？"));        //中文的问号
	printf("%d\n", strlen(" "));
	return 0;
//}
//解析：
//答案按为2，1，1，2，1
//中文汉字，符号有效长度为2
//英文字母，符号，数字有效长度为1
//空格有效长度为1

#include <stdio.h>

int main()
{
	printf("%d\n", sizeof("为"));     
	printf("%d\n", sizeof("2"));
	printf("%d\n", sizeof("a"));
	printf("%d\n", sizeof(""));
	printf("%d\n", sizeof(" "));
	return 0;
}
//解析：
//答案按为3，2，2，1，2
//中文汉字，符号有效长度为2,还有转义字符/0占一个字节
//英文字母，数字，符号有效长度为1,还有转义字符/0占一个字节
//转义字符/0占一个字节
//空格占一个字节，还有转义字符/0占一个字节

/*
sizeof和strlen的几点区别：
sizeof用于测量字节长度，转义字符'\0'会占用一个字节长度；
strlen用于测量字符串的有效长度长度，转义字符'\0'不会计算；
*/

#include <stdio.h>

int main()
{
    char arr1[] = { 'b', 'i', 't' };           
    printf("%s\n",arr1);     //答案按为：bit烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫贴 - B␦ ?
    //解析：
    //写法1：char arr1[] = { 'b', 'i', 't' };
    //此时arr1字符串中无'\0'停止，故而后续值都为随机值，这些值被输出时，被解释为中文字符“烫”
    //若测量strlen(arr1)，则答案为随机值，这取决于编译器
    //char arr2[] = "bit";
    //printf("%s\n", arr2);    //答案按为：bit
    //解析：
    //写法2：char arr2[] = "bit";
    //其完整字符串为"bit\0",('\0'被省略)，故而输出正常（即答案为bit）
    //若测量strlen(arr2)，则答案为3
    return 0;
}